package jp.co.toshiba.ffsa.common;

import java.util.LinkedHashMap;
import java.util.List;

import jp.co.toshiba.ffsa.entity.Price;
import jp.co.toshiba.ffsa.entity.System;

import org.seasar.extension.jdbc.JdbcManager;
import org.seasar.extension.jdbc.where.SimpleWhere;
import org.seasar.framework.container.SingletonS2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;

/**
 * リストボックス取得用クラス
 * @author npc
 */
public class ListBox {

    /**
     * Regionリストボックス作成
     * @return リストボックス作成用リンクリスト
     * @throws Exception
     */
    public LinkedHashMap<String, String> getRegionListBox() throws Exception {

        // S2Container初期化
        SingletonS2ContainerFactory.init();

        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);

        try{
            // 検索条件
            SimpleWhere swh = new SimpleWhere().eq("systemId1", "region")
                                               .eq("deleteFlag", "0")
                                               ;

            // Region情報取得
            List<System> regionList = jdbcManager.from(System.class)
                                                 .where(swh)
                                                 .orderBy("seq")
                                                 .getResultList()
                                                 ;

            // リストの宣言
            LinkedHashMap<String, String> regionHashMap = new LinkedHashMap<String, String>();

            // 空項目セット
            regionHashMap.put("","");

            // 取得情報をリストに格納
            for(int i = 0; i < regionList.size(); i++){
                regionHashMap.put( regionList.get(i).systemId2
                                 , regionList.get(i).value1
                                 );
            }

            return regionHashMap;

        }catch(Exception e){
            throw e;
        }
    }
    /**
     * Regionリストボックス作成(更新画面)
     * @return リストボックス作成用リンクリスト
     * @throws Exception
     */
    public LinkedHashMap<String, String> getUpdRegionListBox() throws Exception {

        // S2Container初期化
        SingletonS2ContainerFactory.init();

        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);

        try{
            // 検索条件
            // JAPANを条件外に
            SimpleWhere swh = new SimpleWhere().eq("systemId1", "region")
                                               .ne("systemId2", 5)
                                               .eq("deleteFlag", "0")
                                               ;

            // Region情報取得
            List<System> regionList = jdbcManager.from(System.class)
                                                 .where(swh)
                                                 .orderBy("seq")
                                                 .getResultList()
                                                 ;

            // リストの宣言
            LinkedHashMap<String, String> regionHashMap = new LinkedHashMap<String, String>();

            // 空項目セット
            regionHashMap.put("","");

            // 取得情報をリストに格納
            for(int i = 0; i < regionList.size(); i++){
                regionHashMap.put( regionList.get(i).systemId2
                                 , regionList.get(i).value1
                                 );
            }

            return regionHashMap;

        }catch(Exception e){
            throw e;
        }
    }

    /**
     * FPGAメーカー名リストボックス作成
     * @return リストボックス作成用リンクリスト
     * @throws Exception
     */
    public LinkedHashMap<String, String> getFpgaMakerListBox() throws Exception {

        // S2Container初期化
        SingletonS2ContainerFactory.init();

        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);

        // FPGAメーカー名情報取得
        List<Price> fpgaMakerList = jdbcManager.selectBySqlFile( Price.class
                                                                , "data/selectPriceFromFpgaMaker.sql"
                                                                ).getResultList();

        // リストの宣言
        LinkedHashMap<String, String> fpgaMakerHashMap = new LinkedHashMap<String, String>();

        // 空項目セット
        fpgaMakerHashMap.put("","");

        // 取得情報をリストに格納
        for(int i = 0; i < fpgaMakerList.size(); i++){
            fpgaMakerHashMap.put( fpgaMakerList.get(i).fpgaMaker
                                , fpgaMakerList.get(i).fpgaMaker
                                );
        }

        return fpgaMakerHashMap;

    }

    /**
     * FPGAシリーズ名リストボックス作成
     * @param fpgaMaker FPGAメーカー名
     * @return リストボックス作成用リンクリスト
     * @throws Exception
     */
    public LinkedHashMap<String, String> getFpgaSeriesListBox(String fpgaMaker) throws Exception {

        // S2Container初期化
        SingletonS2ContainerFactory.init();

        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);

        List<Price> fpgaSeriesList;
        try{
            // FPGAシリーズ名情報取得
            fpgaSeriesList = jdbcManager.selectBySqlFile( Price.class
                                                        , "data/selectPriceFromFpgaSeries.sql"
                                                        , fpgaMaker
                                                        ).getResultList();

            // リストの宣言
            LinkedHashMap<String, String> fpgaSeriesHashMap = new LinkedHashMap<String, String>();

            // 空項目セット
            fpgaSeriesHashMap.put("","");

            // 取得情報をリストに格納
            for(int i = 0; i < fpgaSeriesList.size(); i++){
                fpgaSeriesHashMap.put( fpgaSeriesList.get(i).fpgaSeries
                                     , fpgaSeriesList.get(i).fpgaSeries
                                     );
            }

            return fpgaSeriesHashMap;

        }catch(Exception e){
            throw e;
        }
    }

    /**
     * FPGA型名リストボックス作成
     * @param fpgaMaker FPGAメーカー名
     * @param fpgaSeries FPGAシリーズ名
     * @return リストボックス作成用リンクリスト
     * @throws Exception
     */
    public LinkedHashMap<String, String> getFpgaModelListBox(String fpgaMaker, String fpgaSeries) throws Exception {

        // S2Container初期化
        SingletonS2ContainerFactory.init();

        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);

        try{
            // パラメータ値設定
            Price param        = new Price();
            param.fpgaMaker    = fpgaMaker;
            param.fpgaSeries   = fpgaSeries;


            // FPGA型名情報取得
            List<Price> fpgaModelList = jdbcManager.selectBySqlFile( Price.class
                                                                    , "data/selectPriceFromFpgaModel.sql"
                                                                    , param
                                                                    ).getResultList();

            // リストの宣言
            LinkedHashMap<String, String> fpgaModelHashMap = new LinkedHashMap<String, String>();

            // 空項目セット
            fpgaModelHashMap.put("","");

            // 取得情報をリストに格納
            for(int i = 0; i < fpgaModelList.size(); i++){
                fpgaModelHashMap.put( fpgaModelList.get(i).fpgaModel
                                    , fpgaModelList.get(i).fpgaModel
                                    );
            }

            return fpgaModelHashMap;

        }catch(Exception e){
            throw e;
        }
    }

    /**
     * PKG-typeリストボックス作成
     * @return リストボックス作成用リンクリスト
     * @throws Exception
     */
    public LinkedHashMap<String, String> getPkgTypeListBox() throws Exception {
        //TODO
        // S2Container初期化
        SingletonS2ContainerFactory.init();

        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);

        try{
            // 検索条件
            SimpleWhere swh = new SimpleWhere().eq("deleteFlag", "0")
                                               ;

            // PKG-type情報取得
            List<Price> pkgTypeList = jdbcManager.from(Price.class)
                                                  .where(swh)
                                                  .getResultList()
                                                  ;

            // リストの宣言
            LinkedHashMap<String, String> pkgTypeHashMap = new LinkedHashMap<String, String>();

            // 空項目セット
            pkgTypeHashMap.put("","");

            // 取得情報をリストに格納
            for(int i = 0; i < pkgTypeList.size(); i++){
                pkgTypeHashMap.put( pkgTypeList.get(i).pkgType
                                  , pkgTypeList.get(i).pkgType
                                  );
            }

            return pkgTypeHashMap;

        }catch(Exception e){
            throw e;
        }
    }

    /**
     * PKG-typeリストボックス作成
     * @param fpgaMaker FPGAメーカー名
     * @param fpgaSeries FPGAシリーズ名
     * @return リストボックス作成用リンクリスト
     * @throws Exception
     */
    public LinkedHashMap<String, String> getPkgTypeListBox(String fpgaMaker, String fpgaSeries) throws Exception {

        // S2Container初期化
        SingletonS2ContainerFactory.init();

        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);

        try{
            // 検索条件
            SimpleWhere swh = new SimpleWhere().eq("systemId1", "pkg_type")
                                               .eq("deleteFlag", "0")
                                               ;

            // 引数がNULL(空)でなければ検索条件に追加する
            if(!("").equals(fpgaMaker) && fpgaMaker != null){
                swh.eq("value1", fpgaMaker);
            }

            // 引数がNULL(空)でなければ検索条件に追加する
            if(!("").equals(fpgaSeries) && fpgaSeries != null){
                swh.eq("value2", fpgaSeries);
            }

            // PKG-type情報取得
            List<System> pkgTypeList = jdbcManager.from(System.class)
                                                  .where(swh)
                                                  .orderBy("seq")
                                                  .getResultList()
                                                  ;

            // リストの宣言
            LinkedHashMap<String, String> pkgTypeHashMap = new LinkedHashMap<String, String>();

            // 空項目セット
            pkgTypeHashMap.put("","");

            // 取得情報をリストに格納
            for(int i = 0; i < pkgTypeList.size(); i++){
                pkgTypeHashMap.put( pkgTypeList.get(i).value3
                                  , pkgTypeList.get(i).value3
                                  );
            }

            return pkgTypeHashMap;

        }catch(Exception e){
            throw e;
        }
    }

    /**
     * PKG-typeリストボックス作成
     * @param fpgaMaker FPGAメーカー名
     * @param fpgaSeries FPGAシリーズ名
     * @return リストボックス作成用リンクリスト
     * @throws Exception
     */
    public LinkedHashMap<String, String> getPkgTypeListBox(String fpgaMaker, String fpgaSeries, String fpgaModel) throws Exception {
        // S2Container初期化
        SingletonS2ContainerFactory.init();

        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);

        try{
            // パラメータ値設定
            Price param        = new Price();
            param.fpgaMaker    = fpgaMaker;
            param.fpgaSeries   = fpgaSeries;
            param.fpgaModel    = fpgaModel;

            List<Price> pkgTypeList = jdbcManager.selectBySqlFile( Price.class
                                                                , "data/selectPriceFromFpgaPkgType.sql"
                                                                , param
                                                                ).getResultList();

            // リストの宣言
            LinkedHashMap<String, String> pkgTypeHashMap = new LinkedHashMap<String, String>();

            // 空項目セット
            pkgTypeHashMap.put("","");

            // 取得情報をリストに格納
            for(int i = 0; i < pkgTypeList.size(); i++){
                pkgTypeHashMap.put( pkgTypeList.get(i).pkgType
                                  , pkgTypeList.get(i).pkgType
                                  );
            }

            return pkgTypeHashMap;

        }catch(Exception e){
            throw e;
        }
    }

    /**
     * Quantityリストボックス作成
     * @return リストボックス作成用リンクリスト
     * @throws Exception
     */
    public LinkedHashMap<String, String> getQuantityListBox() throws Exception {

        // S2Container初期化
        SingletonS2ContainerFactory.init();

        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);

        try{
            // 検索条件
            SimpleWhere swh = new SimpleWhere().eq("systemId1", "quantity")
                                               .eq("deleteFlag", "0")
                                               ;

            // Quantity情報取得
            List<System> quantityList = jdbcManager.from(System.class)
                                                   .where(swh)
                                                   .orderBy("seq")
                                                   .getResultList()
                                                   ;

            // リストの宣言
            LinkedHashMap<String, String> quantityHashMap = new LinkedHashMap<String, String>();

            // 空項目セット
            quantityHashMap.put("","");

            // 取得情報をリストに格納
            for(int i = 0; i < quantityList.size(); i++){
                quantityHashMap.put( quantityList.get(i).systemId2
                                   , quantityList.get(i).value1
                                   );
            }

            return quantityHashMap;

        }catch(Exception e){
            throw e;
        }
    }

    /**
     * Serders 有無リストボックス作成
     * @return リストボックス作成用リンクリスト
     * @throws Exception
     */
    public LinkedHashMap<String, String> getSerdesFlagListBox() throws Exception {

        // S2Container初期化
        SingletonS2ContainerFactory.init();

        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);

        try{
            // 検索条件
            SimpleWhere swh = new SimpleWhere().eq("systemId1", "serdes_flag")
                                               .eq("deleteFlag", "0")
                                               ;

            // Serders有無情報取得
            List<System> serdesFlagList = jdbcManager.from(System.class)
                                                     .where(swh)
                                                     .orderBy("seq")
                                                     .getResultList()
                                                     ;

            // リストの宣言
            LinkedHashMap<String, String> serdesFlagHashMap = new LinkedHashMap<String, String>();

            // 空項目セット
            serdesFlagHashMap.put("","");

            // 取得情報をリストに格納
            for(int i = 0; i < serdesFlagList.size(); i++){
                serdesFlagHashMap.put( serdesFlagList.get(i).systemId2
                                     , serdesFlagList.get(i).value1
                                     );
            }

            return serdesFlagHashMap;

        }catch(Exception e){
            throw e;
        }
    }

    /**
     * Logic sizeリストボックス作成
     * @return リストボックス作成用リンクリスト
     * @throws Exception
     */
    public LinkedHashMap<String, String> getLogicSizeListBox() throws Exception {

        // S2Container初期化
        SingletonS2ContainerFactory.init();

        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);

        try{
            // 検索条件
            SimpleWhere swh = new SimpleWhere().eq("systemId1", "logic_size")
                                               .eq("deleteFlag", "0")
                                               ;

            // Serders有無情報取得
            List<System> logicSizeList = jdbcManager.from(System.class)
                                                    .where(swh)
                                                    .orderBy("seq")
                                                    .getResultList()
                                                    ;

            // リストの宣言
            LinkedHashMap<String, String> logicSizeHashMap = new LinkedHashMap<String, String>();

            // 空項目セット
            logicSizeHashMap.put("","");

            // 取得情報をリストに格納
            for(int i = 0; i < logicSizeList.size(); i++){
                logicSizeHashMap.put( logicSizeList.get(i).systemId2
                                    , logicSizeList.get(i).value1
                                    );
            }

            return logicSizeHashMap;

        }catch(Exception e){
            throw e;
        }
    }
}